package org.jeecg.common.modules.doctor.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.modules.doctor.entity.Doctor;
import org.jeecg.common.modules.doctor.vo.*;
import org.jeecg.common.util.enums.CertificationStatusEnum;

import java.util.List;

/**
 * @Description: 医生表
 * @Author: jeecg-boot
 * @Date:   2020-08-13
 * @Version: V1.0
 */
public interface IDoctorService extends IService<Doctor> {


    /**
     * 根据手机号获取医生信息
     * @param mobile
     * @return
     */
    Doctor getByMobile(String mobile);

    /**
     * 根据医生名字获取医生信息
     * @param name
     * @return
     */
    Doctor getByName(String name);

    /**
     * 获取医生的完整信息
     * @param id
     * @return
     */
    DoctorWholeVo doctorWhole(String id);

    /**
     * 注册医生
     * @param mobile
     * @param defaultImg
     * @return
     */
    Doctor registerDoctor(String mobile,String defaultImg);

    /**
     * 修改医生认证状态
     * @param doctorId
     * @param status
     * @param loginUser
     */
    void updateDoctorCertificationStatus(String doctorId, CertificationStatusEnum status,String loginUser);


    /**
     * 初始化助理信息
     * @param name
     * @param mobile
     * @param loginUser
     * @return
     */
    Doctor initAssistant(String name,String mobile,String loginUser);

    /**
     * 查询所有的助理信息
     * @return
     */
    List<Doctor> assistantInfo();

    /**
     * 查询所有医生信息
     * @param name
     * @param certificationStatus
     * @param dataStart
     * @param pageSize
     * @return
     */
    List<DoctorReqVo> getDoctorInfos(String name, Integer certificationStatus, Integer dataStart, Integer pageSize);

    /**
     * 查询所有医生信息的数据总数
     * @param name
     * @param certificationStatus
     * @return
     */
    int getDoctorCount(String name, Integer certificationStatus);

    /**
     * 测试：获取医生信息
     */
    Page<DoctorReqVo> queryDoctors(Page<DoctorReqVo> page,String name,Integer certificationStatus);
    /**
     * 测试：获取医生信息
     */
    Page<DoctorReqVo> queryTcmDoctors(Page<DoctorReqVo> page,String name,Integer certificationStatus);

    /**
     * 查询所有助理信息
     * @param name
     * @param mobile
     * @param doctorName
     * @param dataStart
     * @param pageSize
     * @return
     */
    List<AssistantInfoReqVo> getAssistantInfos(String name, String mobile,String doctorName,Integer dataStart, Integer pageSize);

    /**
     * 查询所有助理信息的数据总数
     * @param name
     * @param mobile
     * @param doctorName
     * @return
     */
    int getCount(String name, String mobile,String doctorName);


    /**
     * 获取指定科室下所有医生
     * @param departmentId
     * @return
     */
    List<Doctor> getDoctorByDepartmentId(int departmentId);

    /**
     * 查询所有认证医生的信息
     * @param certificationStatus
     * @return
     */
    List<CertInfoReqVo> selectCertInfo(Integer certificationStatus,Integer dataStart, Integer pageSize);

    /**
     * 查询所有认证医生的数据总数
     * @param certificationStatus
     * @return
     */
    Integer getCertCount(Integer certificationStatus);

    /**
     * 获取指定数量的推荐医生
     */
    List<SmDoctorReqVo> getRecommendDoctor(Integer num);

    /**
     * 挂号——搜索医生
     */
    List<AssistantInfoReqVo> searchRegisterDoctor(String name);

    List<DoctorReqVo> queryMyDoctors(String openid);

    List<DoctorReqVo> getDoctorsByKeyWord(String keyword, String goodDesc);

    List<DoctorReqVo> getDoctorsByGoodDesc(String goodDesc);
}
